public class Solution {
    // 模拟的 isBadVersion 方法
    // 假设第一个错误版本是 4
    private boolean isBadVersion(int version) {
        return version >= 4; // 假设第 4 个版本是第一个错误版本
    }

    public int firstBadVersion(int n) {
        int left = 1, right = n;
        while (left < right) { // 循环直至区间左右端点相同
            int mid = left + (right - left) / 2; // 防止计算时溢出
            if (isBadVersion(mid)) {
                right = mid; // 答案在区间 [left, mid] 中
            } else {
                left = mid + 1; // 答案在区间 [mid+1, right] 中
            }
        }
        // 此时有 left == right，区间缩为一个点，即为答案
        return left;
    }

    public static void main(String[] args) {
        Solution solution = new Solution();
        int n = 10; // 假设有 10 个版本
        int firstBad = solution.firstBadVersion(n);
        System.out.println("第一个错误版本是: " + firstBad);
    }
}